import axios from "axios";
import {ajax_config, config} from "@/utils/config";
import {history} from "umi";
import {message} from "antd";

export const ajax = axios.create(ajax_config);
ajax.interceptors.request.use(function (this_config): any {

    // @ts-ignore
    if (!config.un_intercept_urls.includes(this_config.url)) {
        let auth_token = localStorage.getItem("auth_token");
        if (auth_token === undefined || auth_token === null || auth_token === '') {
            history.push("/account/login");
            // return false;
        }
        // @ts-ignore
        this_config.headers = {
            ...this_config.headers,
            'auth-token': auth_token,
        }
    }
    return this_config;
}, function (error) {
    message.error("网络错误，请稍候重试！");
    return Promise.reject(error);
});

ajax.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数
    if (response.status === 200) {
        // 根据后端状态码进行不同处理
        switch (response.data.code) {
            case 200: // 成功
                return response.data;
            case 400: // 参数错误
                message.error(response.data.msg || "填写错误，请重试");
                return Promise.reject(response.data);
            case 401: // 未授权（未登录）
                history.push("/account/login");
                message.warning(response.data.msg || "请先登录");
                return Promise.reject(response.data);
            case 403: // 禁止访问（无权限）
                message.warning(response.data.msg || "您没有权限执行此操作");
                return Promise.reject(response.data);
            case 404: // 资源未找到
                message.warning(response.data.msg);
                return Promise.reject(response.data);
            case 500: // 操作失败
                message.error(response.data.msg || "操作失败");
                return Promise.reject(response.data);
            case 502: // 数据重复
                message.error(response.data.msg);
                return Promise.reject(response.data);
            case 503: // 数据不存在
                message.error(response.data.msg);
                return Promise.reject(response.data);
            case 602: // 用户名或密码错误
                message.error(response.data.msg);
                return Promise.reject(response.data);
            case 603: // token过期
                message.warning(response.data.msg || "登录已过期，请重新登录");
                localStorage.removeItem("auth_token");
                history.push("/account/login");
                return Promise.reject(response.data);
            case 901: // 系统维护中
                message.warning(response.data.msg || "系统正在维护中，请稍后再试");
                return Promise.reject(response.data);
            case 902: // 系统繁忙
                message.warning(response.data.msg || "系统繁忙，请稍后再试");
                return Promise.reject(response.data);
            case 903: // 系统配置错误
                message.warning(response.data.msg || "系统配置错误，请联系管理员");
                return Promise.reject(response.data);
            default:
                // 未知状态码
                console.error('未知API状态码:', response.data.code);
                message.warning(response.data.msg || "未知错误，请稍候重试");
                return Promise.reject(response.data);
        }
    } else {
        message.error(response.data.msg);
    }

}, function (error) {
    message.warning("服务器开了个小差，请稍候重试！");
    // 对响应错误做点什么
    return Promise.reject(error);
});